0202. 快乐数【简单】
1. 📝 题目描述
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
- 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
- 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
- 如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false。
示例 1:
txt
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 11
2
3
4
5
6
7
2
3
4
5
6
7
示例 2:
txt
输入:n = 2
输出:false1
2
2
提示:
1 <= n <= 2^31 - 1
2. 🎯 s.1 - 暴力解法
js
/**
* @param {number} n
* @return {boolean}
*/
var isHappy = function (n) {
// 使用集合记录已经出现过的数字,用于检测循环
const seen = new Set()
while (n !== 1 && !seen.has(n)) {
seen.add(n)
n = getSumOfSquares(n)
}
// 如果 n 等于 1,说明是快乐数;否则说明进入了循环
return n === 1
}
// 辅助函数:计算数字各位平方和
function getSumOfSquares(num) {
let sum = 0
while (num > 0) {
const digit = num % 10
sum += digit * digit
num = Math.floor(num / 10)
}
return sum
}1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
- 时间复杂度:
,每次计算平方和会降低数字的位数 - 空间复杂度:
,需要存储中间结果用于循环检测 - 核心思路:
- 根据题目中提供的【快乐数】定义来翻译。